第4节 流程控制语句
前言
- 调试代码,找出代码中的问题经常使用 debugger 来打断点, 而要能在准确位置打上断点, 就必须熟悉程序的执行流程
- 流程控制语句有三种: 顺序结构, 分支结构和循环结构
(一) 顺序结构(默认)
- 程序默认从上到下一句一句代码执行, 这就是顺序结构
- 若是某一行代码出现了错误, 则后面的代码无法执行
<script>
console.log(1);
console.log(2);
console.log(3);
console.log(a);
console.log(4);
console.log(5);
console.log(6);
debugger;
console.log(7);
console.log(8);
</script>
<script>
console.log(1);
console.log(2);
console.log(3);
console.log(a);
console.log(4);
console.log(5);
console.log(6);
// 上面打印了一个没有声明的变量, 所以出错了, 程序终止运行, 不会停在这里
debugger;
console.log(7);
console.log(8);
</script>
(二) 分支结构
1. if else
if(条件) {
// 条件为true执行这里的代码
} else {
// 条件为false执行这里的代码
}
2. 三目运算符
<!-- demo1 -->
<script>
// 是否登录
var isLogin = false;
var text = '';
// if (isLogin) {
// text = '138****0000';
// } else {
// text = '立即登录';
// }
// 以上分支语句可以使用三目运算代替,会更简洁
text = isLogin?'138****000':'立即登录';
console.log('text',text);
</script>
<!-- demo2 -->
<script>
var str = prompt('请输入');
var gender = str === '1' ? '男人' : '女人';
alert(gender);
</script>
3. switch
多重判断的分支结构, 主要用于多种一一对应的情况, 判断条件通常只有一个变量
<script>
var city = prompt('请输入城市简写');
switch(city) {
case 'sz':
alert('你选择了深圳');
break;
case 'gz':
alert('你选择了广州');
break;
case 'sh':
alert('你选择了上海');
break;
case 'bj':
alert('你选择了北京');
break;
default:
alert('该城市不存在');
}
</script>
练习:
练习1:
var month = prompt();
var day = prompt();
// 若用户输入为个位数, 请将其变为2两位数, 最后打印出来
month = month<10?'0'+month:month;
console.log('month:', month);
day = day<10?'0'+day:day;
console.log('day:', day);
练习2: 麦当劳的饮料机有四个按钮, 按钮1得到橙汁,按钮2得到牛奶, 按钮3得到啤酒, 按钮4得到咖啡,
请编写一个程序, 弹出一个窗口, 用户输入的的数字不同, 弹出不同的饮料.
// 注意: 页面输入的内容都是字符串
// Switch进行比较用的是===, 也就是类型要相同, 值也要相同
<script>
var num = prompt('请输入数字');
num = Number(num);
switch(num) {
case 1:
alert('橙汁');
break;
case 2:
alert('牛奶');
break;
case 3:
alert('啤酒');
break;
default:
alert('咖啡');
}
</script>
(三) 循环结构
01 标准 for 循环四部分
(1)循环变量初始值 var i = 0;
(2)循环条件 i<3;
(3)改变循环条件 i++
(4)循环体 {...}
内的代码就是循环体
循环运行规律:
第一轮 先执行第一部分, 再执行第二部分, 然后执行第四部分, 最后执行第三部分, 简称1243
第二轮开始 先执行第二部分(第一部不再执行), 然后执行第四部分, 最后执行第三部分,直到结束, 简称243
<script> // 第1次 i=0 0<3=>true, 所以打印0 // 第2次 i=1 1<3=>true, 所以打印1 // 第3次 i=2 2<3=>true, 所以打印2 // 第4次 i=3 3<3=>false, 终止循环 for (var i = 0; i < 3; i++) { console.log(i); } </script>
02 应用
1.应用demo
<!-- 计算1-10总和 -->
<script>
var sum = 0;
for(var i=1;i<=10;i++){
sum = sum + i;
}
console.log('sum=',sum);
</script>
<!-- 在页面上显示10次"我爱web前端" -->
<script>
var str = '';
for(var i=0;i<10;i++) {
str = str + '<li>我爱web前端</li>';
console.log(str);
}
document.write('<ul>');
document.write(str);
document.write('</ul>');
</script>
2. 练习:
练习1: 计算1~100的和并输出到页面上
练习2: 使用for循环在网页上打印一个ul列表,列表有5个li,li的内容任意
进阶: 给li内容添加序号(从1开始);
<script> var str = ''; for(var i=0;i<5;i++){ str += `<li>${i+1}.xxxxxxxx</li>`; } document.write(str); </script>
2. continue 和 break
- for循环添加continue, continue后面的语句不再执行, 直接进入下一次循环
- for循环添加break后, 当符合break条件, 退出循环
<!-- continue --> <script> for(var i=0;i<10;i++){ if (i===5) { continue; }; console.log(i); } </script> <!-- break --> <script> for(var i=0;i<10;i++){ if (i===5) { break; }; console.log(i); } </script>
练习: 运算并在网页上打印结果 有一篮苹果,两个两个的拿剩一个,三个三个的拿剩一个,四个四个的拿剩一个,五个五个的拿剩一个,六个六个的拿剩一个,七个七个的拿,能拿完,请问这篮子里至少有多少个苹果? <script> for (var i = 0; i < 10000; i++) { if (i % 2 === 1 && i % 3 === 1 && i % 4 === 1 && i % 5 === 1 && i % 6 === 1 && i % 7 === 0) { alert(`至少有${i}个苹果`); break; } } </script>
3. 死循环
循环的四个部分并不是必须的
// 缺少第一部分 <script> var i=0; for(;i<5;i++) { console.log(i); } </script> // 缺少第一部分和第三部分 <script> var i=0; for(;i<5;) { console.log(i); i++; } </script> // 缺少前三部分, 第四部分也可以缺少, 但是没有意义 <script> for(;;) { console.log(222); } </script>
死循环就是循环条件永远满足条件导致循环用不终止, 直到关闭浏览器
// 死循环 <script> for(;;) { console.log(222); } </script> // 上面的练习题,可以使用死循环 <script> var i = 0; for (;;) { if (i % 2 === 1 && i % 3 === 1 && i % 4 === 1 && i % 5 === 1 && i % 6 === 1 && i % 7 === 0) { alert(`至少有${i}个苹果`); break; } i++ } </script>
03 while和do while
do while至少执行一次, 因为先执行后判断
<script>
var i = 0;
while(i<10) {
console.log(i);
i++;
}
</script>
<script>
var i =11;
do{
console.log(i);
i++;
}while(i<10);
</script>
04 for循坏进阶应用
- 数组遍历
- 对象遍历
for循坏进阶应用
1.将数组成员输出到页面上
成员为基本数据类型
<script>
// 数组的循环
var list = ['a','b','c','d','e'];
var str = '';
for(var i=0;i<list.length;i++) {
console.log(list[i]);
str += `<li>${list[i]}</li>`;
}
document.write(str);
</script>
2.将数组成员输出到页面上
成员为引用类型
<script>
// 数组的循环
var list = [{
username: '张三1',
age: 18
},
{
username: '张三2',
age: 19
},
{
username: '张三3',
age: 20
},
{
username: '张三4',
age: 21
},
{
username: '张三5',
age: 22
},
];
var str = '';
for (var i = 0; i < list.length; i++) {
str += `<li>
<span>用户名: ${list[i].username}</span>
<span>年龄: ${list[i].age}</span> </li>`;
}
document.write(str);
</script>
练习: 把身边的成员数组输出到页面上, 样式自编
3.静态页面和动态数据结合
demo.html 静态文件
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport"
content="width=device-width, initial-scale=1, maximum-scale=1, minimum-scale=1, user-scalable=no">
<title>Document</title>
<link rel="stylesheet" href="./demo.css">
</head>
<body>
<div class="top">
<p class="item">
<img src="http://static.huruqing.cn/fresh/banner3.jpeg" alt="">
<span>时令鲜果</span>
</p>
<p class="item">
<img src="http://static.huruqing.cn/fresh/banner3.jpeg" alt="">
<span>时令鲜果</span>
</p>
<p class="item">
<img src="http://static.huruqing.cn/fresh/banner3.jpeg" alt="">
<span>时令鲜果</span>
</p>
<p class="item">
<img src="http://static.huruqing.cn/fresh/banner3.jpeg" alt="">
<span>时令鲜果</span>
</p>
<p class="item">
<img src="http://static.huruqing.cn/fresh/banner3.jpeg" alt="">
<span>时令鲜果</span>
</p>
<p class="item fix"></p>
<p class="item fix"></p>
<p class="item fix"></p>
<p class="item fix"></p>
<p class="item fix"></p>
</div>
<script src="./demo.js"> </script>
</body>
</html>
demo.css
* {
margin: 0;
padding: 0;
}
body {
background-color: #f4f4f4;
}
.top {
background-color: #fff;
display: flex;
justify-content: space-around;
align-items: center;
flex-wrap: wrap;
align-content: flex-start;
}
.top .item {
width: 22%;
height: 94px;
display: flex;
flex-direction: column;
justify-content: space-around;
align-items: center;
}
.top img {
width: 45px;
height: 45px;
}
.top .fix {
height: 0;
}
demo.js
var list = [ { categoryId: 145, name: "时令鲜果", iconUrl: "http://static.huruqing.cn/fresh/r1.png", }, { categoryId: 243, name: "海鲜水产", iconUrl: "http://static.huruqing.cn/fresh/r2.png", }, { categoryId: 279, name: "家禽蛋", iconUrl: "http://static.huruqing.cn/fresh/r3.png", }, { categoryId: 346, name: "地方农产", iconUrl: "http://static.huruqing.cn/fresh/r4.png", }, { categoryId: 436, name: "百果园公司", iconUrl: "http://static.huruqing.cn/fresh/r5.png", }, { categoryId: 357, name: "农品茗茶", iconUrl: "http://static.huruqing.cn/fresh/r6.png", }, { categoryId: 6, name: "五谷杂粮", iconUrl: "http://static.huruqing.cn/fresh/r7.png", }, { categoryId: 311, name: "牛羊肉", iconUrl: "http://static.huruqing.cn/fresh/r8.png", }, ];
var str = "";
for (var i = 0; i < list.length; i++) {
str += ` <p class="item">
<img src="${list[i].iconUrl}" alt="">
<span>${list[i].name}</span>
</p> `;
}
var $top = document.querySelector(".top");
$top.innerHTML = str;
05 对象循环
<script>
var obj = {
name: '张三',
age: 18,
addr: '广东深圳',
hobby: '篮球,足球,羽毛球'
}
for(var p in obj){
console.log(p+'='+obj[p]);
}
</script>
(四) 作业
判断今天是星期几
使用Switch语句, 在页面上输出今天是星期几, 比如: 今天是星期四就在页面上显示"今天是星期四"
// 下面这行代码可以获得星期对应的数字,如果今天是星期四,则day的值为4
渲染电影列表和影院列表
电影列表数据: http://81.71.65.4:3008/film/list?type=3
影院列表数据: http://81.71.65.4:3008/cinema/list?cityName=%E6%B7%B1%E5%9C%B3
二维数组(附加题)
当数组的成员也是数组时, 我们把这个数组称为二维数组, 有以下二维数组, 计算所有所有成员总和
var list = [ [1,3,5], [2,4,6], [3,6,9] ]
生成乘法表(附加题)
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> <style> .num { margin-left: 5px; } .box { border: 1px solid #999; } .no { border: 1px solid greenyellow; background-color: greenyellow; display: inline-block; height: 20px; width: 20px; line-height: 20px; text-align: center; border-radius: 50%; font-size: 18px; margin-left: 10px; } </style> </head> <body> <pre> 需求: 点击按钮生成乘法口诀表, 样式自理 </pre> <pre> ps: 使用双重for循环来实现 外层for循环, i的取值从1-9 内层for循环, j的取值从1-i </pre> <button>生成</button> <div class="box"> </div> </body> </html>